//创建用户集合
//引入下载好的mongoose第三方模块
const mongoose=require('mongoose');
//密码加密
//导入下载好的bcrypt模块
const bcrypt=require('bcrypt');
//引入下载好的joi模块用于验证规则
const Joi=require('joi');
//设定集合规则
const userSchema= new mongoose.Schema({
    username:{
        type:String,
        //不能为空
        required:[true,'用户名不能为空'],
        //用户名最小长度
        minlength:2,
        maxlength:16
    },
    email:{
        type:String,
        //唯一性
        unique:true,
        //定义邮箱格式
    },
    password:{
        type:String,
        required:[true,'密码不能为空']
    },
    //角色
    //如果是超级管理员用admin代表
    //如果是普通用户用normal表示
    role:{
        type:String,
        required:true
    },
    //状态
    //如果是0就是启用状态
    //如果是1就是禁用状态
    state:{
        type:Number,
        //默认为0
        defaule:0
    }
});
//创建集合
const User= mongoose.model('User',userSchema);
//密码加密函数
async function createUser(){
    //随机字符串
   const salt= await bcrypt.genSalt(10);
//   通过随机字符串加密后的密码
 const pass= await bcrypt.hash('123456',salt);
 //创建用户
// const user=await User.create({
//     username:'刘斌博',
//     email:'1827775255@qq.com',
//     password:pass,
//     role:'admin',
//     state:0
// });
}
//createUser();

//验证用户信息
const validateUser=(user)=>{
    //对象验证规则
    const schema=Joi.object({
        username:Joi.string().min(2).max(12).required().error(new Error('用户名不符合规则')),
        email:Joi.string().email().required().error(new Error('邮箱不符个要求')),
        password:Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/).required().error(new Error('密码格式不符合要求')),
        //用户只能传递normal 或者admin
        role:Joi.string().valid('normal','admin').required().error(new Error('角色值非法')),
        state:Joi.number().valid(0,1).required().error(new Error('状态值非法'))
    });
    //实施验证
    return  schema.validateAsync(user);
}
//将用户集合作为模块成员进行导出
module.exports={
    //当对象里的键值对一样时可以直接写一个就行下面这个==User：User
    User,
    validateUser
}